С общими понятиями о стеке мы познакомились в Шаг 12 - Что такое стек. Там мы видели что работать со стеком можно командами push и pop. Но что если нам нужно будет узнать что же все таки храниться в стеке не забирая от туда значения? Из этого есть выход и здесь нам может помочь регистр bp. Вообще bp можно использовать свободно для многих целей, мы с Вами посмотрим пример на основе стека. Итак, код.
MODEL SMALL
STACK 256
CODESEG
Start:
mov ax,@data ; установка в ds адpеса
mov ds,ax ; сегмента данных
mov ax,'F'
push ax
mov ax,'I'
push ax
mov ax,'R'
push ax
mov ax,'S'
push ax
mov ax,'T'
push ax
mov cx,5 ; счетчик
mov bp,sp ; настраиваем bp
WriteLoop:
mov dx,[bp] ; берем значение
Call WriteChar
add bp,2
loop WriteLoop
Exit:
CALL ExitProgramm
INCLUDE function.asm
End Start
Первыми командными мы помещаем данные в стек. Можно посмотреть что там адресовавшиcь ss:sp.

Кто последним пришел тот в стеке первый. Последняя команда на данный момент.
mov ax,'T' push ax
Вот эта буква как раз в самом верху сейчас. Но в самом верху стека или внизу памяти. SP указывает на низ в памяти. Соответственно пройдя вверх можно исследовать что в стеке. Вот для этого мы регистр BP и настраиваем.
mov bp,sp

А дальше мы начинаем в цикле выбирать значения по адресу bp постоянно его увеличивая на 2. Почему на 2? Вы сохраняли регистр AX он два байта, а нам нужен только один байт. Вот мы его и берем. Смотрим результат работы программы.

Все нормально.